﻿//using System;
//using System.Collections.Generic;
//using System.Configuration;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;

//namespace Nb.Common.Attributes
//{
//    /// <summary>
//    /// 通过反射查找系统内的所有常量Field
//    /// </summary>
//    [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
//    public class NbConstFieldAttribute : Attribute
//    {
//        public NbConstFieldAttribute()
//        {

//        }
//        public NbConstFieldAttribute(string description)
//        {
//            Description = description;
//        }

//        public string Description { get; set; }

//        public static NbConstFieldAttribute TryGet(Type calssType, string constName)
//        {
//            var memberInfos = calssType.GetMember(constName);

//            foreach (var memberInfo in memberInfos)
//            {
//                var customAttributes = memberInfo.GetCustomAttributes(typeof(NbConstFieldAttribute), false);
//                if (customAttributes.Length > 0)
//                {
//                    var temp = (NbConstFieldAttribute)customAttributes[0];
//                    return temp;
//                }
//            }

//            return null;
//        }
//    }

//    /// <summary>
//    /// 通过反射查找系统内的所有常量Field的容器
//    /// </summary>
//    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
//    public class NbConstFieldContainerAttribute : Attribute
//    {
//        public NbConstFieldContainerAttribute()
//        {

//        }
//        public NbConstFieldContainerAttribute(string category, string description)
//        {
//            Category = category;
//            Description = description;
//        }

//        public string Category { get; set; }
//        public string Description { get; set; }
//    }

//    /// <summary>
//    /// 类型声明的Const字段的信息
//    /// </summary>
//    public class NbConstFieldValue
//    {
//        public string FieldName { get; set; }
//        public string FieldValue { get; set; }
//        public string Description { get; set; }

//        /// <summary>
//        /// 获取某个类型声明的所有的Const字段的信息
//        /// </summary>
//        /// <param name="classType"></param>
//        /// <returns></returns>
//        public static IList<NbConstFieldValue> GetAllNbConstFieldStrings(Type classType)
//        {
//            var list = new List<NbConstFieldValue>();
//            var fieldInfos = classType.GetFields();
//            foreach (var fieldInfo in fieldInfos)
//            {
//                var customAttributes = fieldInfo.GetCustomAttributes(typeof(NbConstFieldAttribute), false);
//                if (customAttributes.Length > 0)
//                {
//                    var temp = (NbConstFieldAttribute)customAttributes[0];
//                    var fieldValue = new NbConstFieldValue { Description = temp.Description, FieldName = fieldInfo.Name };
//                    var value = fieldInfo.GetValue(null);
//                    fieldValue.FieldValue = (string)value;
//                    list.Add(fieldValue);
//                }
//            }

//            return list;
//        }

//        /// <summary>
//        /// 获取某个类型声明的所有的Const字段的信息
//        /// </summary>
//        /// <typeparam name="T"></typeparam>
//        /// <returns></returns>
//        public static IList<NbConstFieldValue> GetAllNbConstFieldStrings<T>()
//        {
//            var classType = typeof(T);
//            return GetAllNbConstFieldStrings(classType);
//        }

//        public static bool ContainsConstFiled<T>(string value)
//        {
//            var userTypeCodes = GetAllNbConstFieldStrings<T>()
//                .Select(x => x.FieldValue).ToList();
//            bool contains = userTypeCodes.Contains(value, StringComparer.OrdinalIgnoreCase);
//            return contains;
//        }
//    }
//}
